package cn.zhuama.common.controller;

import cn.zhuama.basic.exception.BusinessException;
import cn.zhuama.basic.util.AjaxResult;
import cn.zhuama.common.domain.BinderDto;
import cn.zhuama.common.domain.SmsDto;
import cn.zhuama.common.service.BindphoneService;
import cn.zhuama.common.service.LoginService;
import cn.zhuama.org.service.ILogininfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

@RestController
@RequestMapping("/login")
public class LoginController {

    @Autowired
    LoginService loginService;

    @Autowired
    ILogininfoService logininfoService;

    @Autowired
    private BindphoneService bindphoneService;


    @PostMapping
   // 直接用对象封装吧 用map bug多的 类型转换不过来
    public AjaxResult login(@RequestBody Map<String,Object> mapl, HttpServletRequest req) {
        try {
            String taken = req.getHeader("token");
            String Taken = req.getHeader("Ttoken");
            //1.参数检验 根据请求头 判断这个请求中是否有taken 送到Service中去
            if (taken == null || taken.equals("undefined")){
                //判断账号密码 来获取本地的token
                mapl.put("token", loginService.noTokenJWT(mapl));
                //应该吧map封装整合一下
                //这里在获得个当前时间进行判断一下
                //这里得再封装个权限 和menu
               //这个套娃只能自己看了 有menu 权限
                return AjaxResult.me().setObject(loginService.fzMap(loginService.fz(mapl)));
            }
            else {
                //如果能到这步说明 账号密码是正确 且还带有token 判断下请求体token 和本地token 是否相同 好像么必要 是非对错拦截器自会判断？
                //所以这步就是去访问index
                //有个bug啊 就是当token里面为undefined咋整
                return AjaxResult.me().setObject(mapl);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.me().setSuccess(false).setMessage(e.getMessage());
        }
    }


    @PostMapping("/wechat/{code}")
    public AjaxResult wxlogin(@PathVariable String code, HttpServletRequest req) {
        try {
            return loginService.wxlogin(code);
        } catch (BusinessException e) {
            e.printStackTrace();
            return new AjaxResult(false,e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
            return new AjaxResult(false,"系统异常，请稍后重试!!!");
        }
    }

    //判断微信 手机注册绑定
    @PostMapping("/binder")
    public AjaxResult wechatBinder(@RequestBody BinderDto binderDto){
        try {
            return logininfoService.wechatBinder(binderDto);
        } catch (BusinessException e) {
            e.printStackTrace();
            return AjaxResult.me().setSuccess(false).setMessage(e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
            return new AjaxResult(false,"系统异常，请稍后重试!!!");
        }
    }

    //手机验证码
    @PostMapping("/binderSmsCode")
    public AjaxResult binderSmsCode(@RequestBody SmsDto smsDto){
        try {
            bindphoneService.binderSmsCode(smsDto);
            return new AjaxResult().setMessage("看看有没有");
        } catch (BusinessException e) {
            e.printStackTrace();
            return new AjaxResult(false,"发送失败，" + e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
            return new AjaxResult(false,"系统繁忙!!!");
        }
    }



    //用对象
//        public AjaxResult login(@RequestBody LoginDto loginDto, HttpServletRequest req){
//        //1.参数检验 根据请求头 判断这个请求中是否有taken 送到Service中去
//        if(req.getHeader("token")==null){
//            //判断账号密码 来获取本地的token 返回的是一个map 不对 是带着data 的Ajax
//            return (loginService.noToken(loginDto)));
//        }else {
//            //如果能到这步说明 账号密码是正确 且还带有token 判断下请求体token 和本地token 是否相同 好像么必要 是非对错拦截器自会判断？
//            //所以这步任务就是带着数据去
//            return AjaxResult.me();
//        }
//    }
}
